﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BolsaTrabajo.BusinessEntities;
using BolsaTrabajo.DataAccess;
using System.Transactions;
using System.Data;

namespace BolsaTrabajo.BusinessLogic
{
    public class EmpresaLogic
    {
        EmpresaData odata = null;

        public EmpresaLogic()
        {
            odata = new EmpresaData();
        }

        public Empresa CargarEntidad(Int32 id)
        {
            Empresa resultado = null;
            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.CargarEntidad(id);
                    tx.Complete();
                }
            }
            catch (Exception)
            {
                throw;
            }
            return resultado;
        }

        public Boolean Registrar(Empresa item)
        {
            Boolean resultado = true;
            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.Registrar(item);
                    tx.Complete();
                }
            }
            catch (Exception)
            {

                resultado = false;
            }
            return resultado;
        }

        public Boolean RegistrarEmpresa(String applicationId, String userID, String ruc, String razonSocial, String personaContacto, String distrito, String direccion, String correoElectronico, String telefono, String paginaWeb, Int32 idCategoria, String descripcion, String idUsuarioCreacion, DateTime fechaCreacion, Boolean idEstado)
        {
            Boolean resultado = true;

            EmpresaLogic BLEmpresa = new EmpresaLogic();
            Empresa BEEmpresa = new Empresa();

            Empresa empresaACrear = new Empresa();
            empresaACrear.ApplicationId = new Guid(applicationId);
            empresaACrear.UserId = new Guid(userID);
            empresaACrear.RUC = ruc;
            empresaACrear.RazonSocial = razonSocial;

            BEEmpresa = BLEmpresa.ObtenerEntidadPorRUC(ruc);

            if (BEEmpresa.RUC != ruc)
            {
                empresaACrear.RUC = ruc;
            }
            else
            {
                resultado = false;
                return resultado;
            }

            empresaACrear.PersonaContacto = personaContacto;
            empresaACrear.Distrito = distrito;
            empresaACrear.Direccion = direccion;
            empresaACrear.CorreoElectronico = correoElectronico;
            empresaACrear.Telefono = telefono;
            empresaACrear.PaginaWeb = paginaWeb;
            empresaACrear.IdCategoria = idCategoria;
            empresaACrear.Descripcion = descripcion;
            empresaACrear.IdUsuarioCreacion = new Guid(idUsuarioCreacion);
            empresaACrear.FechaCreacion = fechaCreacion;
            empresaACrear.IdEstado = idEstado;

            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.Registrar(empresaACrear);
                    tx.Complete();
                }
            }
            catch (Exception)
            {

                resultado = false;
            }
            return resultado;
        }

        public Boolean Actualizar(Empresa item)
        {
            Boolean resultado = true;
            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.Actualizar(item);
                    tx.Complete();
                }
            }
            catch (Exception)
            {

                resultado = false;
            }
            return resultado;
        }

        public Boolean Eliminar(Empresa item)
        {
            Boolean resultado = true;
            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.Eliminar(item);
                    tx.Complete();
                }
            }
            catch (Exception)
            {

                resultado = false;
            }
            return resultado;
        }

        public DataTable ListarEmpresas(String empresa, Int32 estado)
        {
            return odata.ListarEmpresas(empresa, estado);
        }

        public Empresa ObtenerEntidadPorRUC(String ruc)
        {
            Empresa resultado = null;
            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.ObtenerEntidadPorRUC(ruc);
                    tx.Complete();
                }
            }
            catch (Exception)
            {

                throw;
            }
            return resultado;
        }
    }
}
